package bean;

import java.sql.SQLException;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
import javax.servlet.http.HttpServletRequest;

import com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException;

import DAO.LaboratorioDAO;
import Model.Laboratorio;

public class LaboratorioBean {
	private int id;
	private String nome_laboratorio;
	private String endereco;
	private String telefone;
	private String cep;
	private String email;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getNome_laboratorio() {
		return nome_laboratorio;
	}
	public void setNome_laboratorio(String nome_laboratorio) {
		this.nome_laboratorio = nome_laboratorio;
	}
	public String getEndereco() {
		return endereco;
	}
	public void setEndereco(String endereco) {
		this.endereco = endereco;
	}
	public String getTelefone() {
		return telefone;
	}
	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}
	public String getCep() {
		return cep;
	}
	public void setCep(String cep) {
		this.cep = cep;
	}
	public String getEmail() {
		return email;
	}	
	public void setEmail(String email) {
		this.email = email;
	}	
	
	public String Salvar()
	{
		try
		{
			Laboratorio lab = new Laboratorio();
			lab.setNomeLaboratorio(this.nome_laboratorio);
			lab.setCep(this.cep);
			lab.setEmail(this.email);
			lab.setEndereco(this.endereco);
			lab.setTelefone(this.telefone);
			
			if(this.id > 0)
			{
				lab.setId(this.id);
				LaboratorioDAO.Update(lab);
			}
			else
				LaboratorioDAO.Insert(lab);
			
			lab = null;
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("sucesso", new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso!", "Informações Salvas com sucesso"));
		}
		catch(Exception ex)
		{
			ex.printStackTrace();
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("erro", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro!", "Ocorreu um problema ao salvar as informações, contate o administrador do sistema"));
		}
		
		return  "laboratorio_list";
	}
	
	public String Editar()
	{
		HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
		int id = Integer.parseInt(request.getParameter("idlaboratorio"));
		Laboratorio lab = null;
		try
		{
			lab = LaboratorioDAO.LoadObject(id);
			setId(lab.getId());
			setNome_laboratorio(lab.getNomeLaboratorio());
			setEndereco(lab.getEndereco());
			setCep(lab.getCep());
			setTelefone(lab.getTelefone());
			setEmail(lab.getEmail());
			return "laboratorio_edit"; 
			
		}
		catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
			return "laboratorio_list?faces-redirect=true";
		}
	}
	
	public String Deletar()
	{
		HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
		int id = Integer.parseInt(request.getParameter("idlaboratorio"));
		
		try
		{
			LaboratorioDAO.Delete(id);
			FacesContext facesContext = FacesContext.getCurrentInstance();
			facesContext.addMessage("sucesso", new FacesMessage(FacesMessage.SEVERITY_INFO, "Sucesso!", "Informações Deletadas com sucesso"));

		}		
		catch(SQLException sqlex)
		{	
			if(sqlex.getErrorCode()  ==  1451)
			{
				FacesContext facesContext = FacesContext.getCurrentInstance();
				facesContext.addMessage("erro", new FacesMessage(FacesMessage.SEVERITY_WARN, "Alerta!", "O laboratório em questão não pode ser deletado pois está sendo utilizado em exames!"));
			}
			else
			{
				FacesContext facesContext = FacesContext.getCurrentInstance();
				facesContext.addMessage("erro", new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro!", "Ocorreu um problema ao salvar as informações, contate o administrador do sistema"));
				sqlex.printStackTrace();				
			}
		}
		return "laboratorio_list";		
	}	
}
